package ar.com.sgsvm.view.cliente;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import android.annotation.SuppressLint;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.TextView;
import ar.com.sgsvm.R;
import ar.com.sgsvm.entity.Cliente;

public class ClienteAdapter extends ArrayAdapter<Cliente> {

	private Context mContext;
	private List<Cliente> mClientes;
	private List<Cliente> mAllClientes;

	public ClienteAdapter(Context context, int res, List<Cliente> clientes) {
		super(context, res, clientes);
		mContext = context;
		mClientes = clientes;
		mAllClientes = clientes;
	}

	@Override
	public int getCount() {
		return mClientes.size();
	}

	@Override
	public Cliente getItem(int posicion) {
		return mClientes.get(posicion);
	}

	@Override
	public Filter getFilter() {
		return new FilterCliente();
	}

	public void sort(int which, int asc) {
		Collections.sort(mClientes, new ClienteComparator(which, asc));
		notifyDataSetChanged();
	}

	@Override
	public View getView(int posicion, View convertView, ViewGroup group) {

		ViewHolder holder;
		if (convertView == null) {
			holder = new ViewHolder();
			convertView = View.inflate(mContext, R.layout.lyt_cliente, null);
			holder.txtIdCliente = (TextView) convertView.findViewById(R.id.txtIdCliente);
			holder.txtApellido = (TextView) convertView.findViewById(R.id.txtApellido);
			holder.txtNombre = (TextView) convertView.findViewById(R.id.txtNombre);
			holder.txtDireccion = (TextView) convertView.findViewById(R.id.txtDireccion);
			holder.txtLocalidad = (TextView) convertView.findViewById(R.id.txtLocalidad);
			holder.txtTelefono = (TextView) convertView.findViewById(R.id.txtTelefono);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		Cliente cliente = getItem(posicion);
		holder.txtIdCliente.setText(String.valueOf(cliente.getIdCliente()));
		holder.txtApellido.setText(cliente.getApellido()+", ");
		holder.txtNombre.setText(cliente.getNombre());
		holder.txtDireccion.setText(cliente.getDireccion()+", ");
		holder.txtLocalidad.setText(cliente.getLocalidad().getNombre());
		holder.txtTelefono.setText(String.valueOf(cliente.getTelefono()));
		return convertView;
	}

	private static class ViewHolder {
		TextView txtIdCliente;
		TextView txtApellido;
		TextView txtNombre;
		TextView txtDireccion;
		TextView txtLocalidad;
		TextView txtTelefono;
	}

	private class FilterCliente extends Filter {

		@SuppressLint("DefaultLocale")
		@Override
		protected FilterResults performFiltering(CharSequence constraint) {
			String filtro = constraint.toString().toLowerCase();
			List<Cliente> clientesFiltrados = new ArrayList<Cliente>();
			FilterResults results = new FilterResults();
			if (constraint != null && !constraint.equals("")) {

				for (Cliente cliente : mAllClientes) {
					String apellido = cliente.getApellido().toLowerCase();
					if (apellido.contains(filtro)) {
						clientesFiltrados.add(cliente);
					}
				}

				results.values = clientesFiltrados;
				results.count = clientesFiltrados.size();

			} else {
				results.values = mAllClientes;
				results.count = mAllClientes.size();
			}

			return results;
		}

		@SuppressWarnings("unchecked")
		@Override
		protected void publishResults(CharSequence constraint, FilterResults results) {
			mClientes = (List<Cliente>) results.values;
			notifyDataSetChanged();
		}

	}

}
